import Vue from 'vue';
import Main from './NotifyMessage.vue';

const MessageConstructor = Vue.extend(Main);
let instance;
const instances = [];
let seed = 1;

const Message = (options = {}) => {
	if (typeof options === 'string') {
		options = {
			message: options
		};
	}
	const userOnClose = options.onClose;
	const id = 'message_' + seed++;
	options.onClose = function () {
		Message.close(id, userOnClose);
	};

	instance = new MessageConstructor({
		data: options
	});

	instance.id = id;

	instance.vm = instance.$mount();
	document.body.appendChild(instance.vm.$el);

	instance.vm.visible = true;
	instance.dom = instance.vm.$el;
	instances.push(instance);
	return instance.vm;
};

['success', 'warning', 'info', 'error'].forEach(type => {
	Message[type] = options => {
		if (typeof options === 'string') {
			options = {
				message: options
			};
		}
		options.type = type;
		return Message(options);
	};
});

Message.close = function (id, userOnClose) {
	for (let i = 0, len = instances.length; i < len; i++) {
		if (id === instances[i].id) {
			if (typeof userOnClose === 'function') {
				userOnClose(instances[i]);
			}
			instances.splice(i, 1);
			break;
		}
	}
};

Message.closeAll = function () {
	for (let i = instances.length - 1; i >= 0; i--) {
		instances[i].close();
	}
};

export default Message;
